package org.qcit.plugins

import com.android.annotations.NonNull
import com.android.annotations.Nullable;
import com.android.build.api.transform.Context
import com.android.build.api.transform.DirectoryInput
import com.android.build.api.transform.Format
import com.android.build.api.transform.JarInput;
import com.android.build.api.transform.QualifiedContent;
import com.android.build.api.transform.Transform;
import com.android.build.api.transform.TransformException;
import com.android.build.api.transform.TransformInput;
import com.android.build.api.transform.TransformInvocation;
import com.android.build.api.transform.TransformOutputProvider;
import com.android.build.gradle.internal.pipeline.TransformManager
import com.android.utils.FileUtils
import org.gradle.api.GradleException
import org.gradle.api.Project;

import java.io.IOException;
import java.util.Collection;
import java.util.Set
import java.util.jar.JarFile;

class TimeCountTransForm extends Transform {
    Project project
    PackageExtension packageExtension

    TimeCountTransForm(Project project) {
        this.project = project
        this.packageExtension = project.extensions.getByType(PackageExtension)
    }
    //该Transform最终会生成一个Task，这个名字就是Task名字
    @Override
    public String getName() {
        return "TimeCount"
    }

    /**
     * 指定 Transform 处理的数据，
     * CONTENT_CLASS 表示处理 java class 文件，
     * CONTENT_RESOURCES, 表示处理 java 的资源
     */
    @Override
    public Set<QualifiedContent.ContentType> getInputTypes() {
        return TransformManager.CONTENT_CLASS
    }

    /**
     * Transform 要操作的内容范围
     * 1.PROJECT 只有项目内容
     * 2.SUB_PROJECTS 只有子项目内容
     * 3.EXTERNAL_LIBRARIES 只有外部库
     * 4.TESTED_CODE 当前变量（包括依赖项）测试的代码
     * 5.PROVIDED_ONLY 本地或者员村依赖项
     */
    @Override
    public Set<? super QualifiedContent.Scope> getScopes() {
        return TransformManager.SCOPE_FULL_PROJECT;
    }

    // 是否增量编译
    @Override
    public boolean isIncremental() {
        return false
    }

    /**
     *
     * @param context
     * @param inputs 有两种类型，一种是目录，一种是 jar 包，要分开遍历
     * @param outputProvider 输出路径
     */

    @Override
    void transform(TransformInvocation transformInvocation) throws TransformException, InterruptedException, IOException {
        super.transform(transformInvocation)

        def pages = packageExtension.pages.each { println("======================" + it) }
        //获取输入项进行遍历
        def transformInputs = transformInvocation.inputs
        //获取输出目录
        def outputProvider = transformInvocation.outputProvider
        //不是增量更新删除所有的outputProvider
        outputProvider.deleteAll()
        //有两种类型，一种是目录，一种是 jar 包，要分开遍历
        transformInputs.each {
            transformInput -> {
                    // 遍历所有class文件
                    transformInput.directoryInputs.each {
                        DirectoryInput directoryInput ->
                            FileHandle.handleDirectoryInput(directoryInput, outputProvider, pages,packageExtension.threshold)
                    }
                    //遍历所有jar model
                    transformInput.jarInputs.each {
                        JarInput jarInput ->{
                            FileHandle.handleJarInput(jarInput, outputProvider, pages,packageExtension.threshold)
//                            //直接将 jar 包 copy 到输出目录
//                            File dest = outputProvider.getContentLocation(jarInput.name, jarInput.contentTypes, jarInput.scopes, Format.JAR)
//                            FileUtils.copyFile(jarInput.file, dest)
                        }
//
                    }
                }
        }
    }
}
